Alexander Stapff contributes the 'height' filter.
authorrobertl <robertl>
Fri, 8 Aug 2008 04:35:53 +0000 (04:35 +0000)
committerrobertl <robertl>
Fri, 8 Aug 2008 04:35:53 +0000 (04:35 +0000)
13 files changed:
Makefile.in
configure
configure.in
filter_vecs.c
gbversion.h
height.c [new file with mode: 0755]
msvc/GPSBabel.vcproj
reference/track/height.gpx [new file with mode: 0755]
reference/track/height_out.gpx [new file with mode: 0755]
testo
xmldoc/formats/height.xml [new file with mode: 0755]
xmldoc/formats/options/height-add.xml [new file with mode: 0755]
xmldoc/formats/options/height-wgs84tomsl.xml [new file with mode: 0755]

index f9a639b801bbc061df8d1853ccfabf06f6216fbf..27bdd78a5dd4f8ec39ff40a60596554c330a4ae2 100644 (file)
@@ -65,7 +65,7 @@ FMTS=@FMTS@
 
 FILTERS=position.o radius.o duplicate.o arcdist.o polygon.o smplrout.o \
        reverse_route.o sort.o stackfilter.o trackfilter.o discard.o \
-       nukedata.o interpolate.o transform.o
+       nukedata.o interpolate.o transform.o height.o
 
 JEEPS=jeeps/gpsapp.o jeeps/gpscom.o \
        jeeps/gpsmath.o jeeps/gpsmem.o  \
@@ -545,6 +545,8 @@ gtm.o: gtm.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
   jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
 gtrnctr.o: gtrnctr.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
   zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
+height.o: height.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
+  zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h filterdefs.h
 hiketech.o: hiketech.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
   zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
 holux.o: holux.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
index f2bd7042a4a7b362fde49683cefb1ed71eacb1e4..40d34106f04a681a785a9b28d6628292acee64f9 100755 (executable)
--- a/configure
+++ b/configure
@@ -1746,7 +1746,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Increase GBBUILD for a new release
 GBBUILD=16
 # YYYYMMDD, please, if beta, i.e. "-beta20060413"
-PACKAGE_RELEASE="-beta20080514"
+PACKAGE_RELEASE="-beta20080807"
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_RELEASE "$PACKAGE_RELEASE"
index c60efabf63cd305b9d960c55309ac76fad18b303..19edc2ffa53f92f120c659cbb1ca693f823cee92 100644 (file)
@@ -7,7 +7,7 @@ AC_INIT(GPSBabel, 1.3.5, BUG-REPORT-ADDRESS)
 # Increase GBBUILD for a new release
 GBBUILD=16
 # YYYYMMDD, please, if beta, i.e. "-beta20060413"
-PACKAGE_RELEASE="-beta20080514"
+PACKAGE_RELEASE="-beta20080807"
 AC_DEFINE_UNQUOTED(PACKAGE_RELEASE, "$PACKAGE_RELEASE", [Define to the release name of this package.])
 AC_SUBST(PACKAGE_RELEASE)
 
index 10d4670d985dbec086fc42ffc5e4a069711e320e..d5ca9324dcc5990fec9bf5f3009fb82603d79f4a 100644 (file)
@@ -44,6 +44,7 @@ extern filter_vecs_t discard_vecs;
 extern filter_vecs_t nuke_vecs;
 extern filter_vecs_t interpolatefilt_vecs;
 extern filter_vecs_t transform_vecs;
+extern filter_vecs_t height_vecs;
 
 static
 fl_vecs_t filter_vec_list[] = {
@@ -118,6 +119,12 @@ fl_vecs_t filter_vec_list[] = {
                "transform",
                "Transform waypoints into a route, tracks into routes, ..."
        },
+       {
+               &height_vecs,
+               "height",
+               "Manipulate altitudes"
+       },
+       
 #endif
         {
                NULL,
index 5ab54b9f5f0df1e8f947bc21a33686541c4d8de6..66a82b5ef3c0555a1abc2ca46fad3a260b9a5e45 100644 (file)
@@ -4,5 +4,5 @@
  *
  * Isn't simplification via automation grand?
  */
-#define VERSION "1.3.5-beta20080514"
+#define VERSION "1.3.5-beta20080807"
 #define WEB_DOC_DIR "http://www.gpsbabel.org/htmldoc-development"
diff --git a/height.c b/height.c
new file mode 100755 (executable)
index 0000000..191cdfd
--- /dev/null
+++ b/height.c
@@ -0,0 +1,167 @@
+/*
+       Copyright (C) 2008 Alexander Stapff, a.stapff@gmx.de
+
+       Geoid separation code by Oleg Gusev, from data by Peter Dana.
+       This code was published by the gpsd project (http://gpsd.berlios.de/)
+       under the BSD license.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include "defs.h"
+#include "filterdefs.h"
+
+#define MYNAME "height"
+
+#if FILTERS_ENABLED
+static char *addopt        = NULL;
+static char *wgs84tomslopt = NULL;
+static double addf;
+
+
+static
+arglist_t height_args[] = {
+       {"add", &addopt, "Adds a constant value to every altitude (meter, append \"f\" (x.xxf) for feet)",
+               NULL, ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX},
+       {"wgs84tomsl", &wgs84tomslopt, "Converts WGS84 ellipsoidal height to orthometric height (MSL)",
+               NULL, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX},
+       ARG_TERMINATOR
+};
+
+
+static double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22)
+{
+       double delta;
+
+       if (y1 == y2 && x1 == x2 ) return (z11);
+       if (y1 == y2 && x1 != x2 ) return (z22*(x-x1)+z11*(x2-x))/(x2-x1);
+       if (x1 == x2 && y1 != y2 ) return (z22*(y-y1)+z11*(y2-y))/(y2-y1);
+
+       delta=(y2-y1)*(x2-x1);
+
+       return (z22*(y-y1)*(x-x1)+z12*(y2-y)*(x-x1)+z21*(y-y1)*(x2-x)+z11*(y2-y)*(x2-x))/delta;
+}
+
+
+/* return geoid separation (MSL - WGS84) in meters, given a lat/lot in degrees */
+static double wgs84_separation(double lat, double lon)
+{
+#define GEOID_ROW      19
+#define GEOID_COL      37
+       static const char geoid_delta[GEOID_COL*GEOID_ROW]={
+       /* 90S */ -30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30, -30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,
+       /* 80S */ -53,-54,-55,-52,-48,-42,-38,-38,-29,-26,-26,-24,-23,-21,-19,-16,-12, -8, -4, -1,  1,  4,  4,  6,  5,  4,   2, -6,-15,-24,-33,-40,-48,-50,-53,-52,-53,
+       /* 70S */ -61,-60,-61,-55,-49,-44,-38,-31,-25,-16, -6,  1,  4,  5,  4,  2,  6, 12, 16, 16, 17, 21, 20, 26, 26, 22,  16, 10, -1,-16,-29,-36,-46,-55,-54,-59,-61,
+       /* 60S */ -45,-43,-37,-32,-30,-26,-23,-22,-16,-10, -2, 10, 20, 20, 21, 24, 22, 17, 16, 19, 25, 30, 35, 35, 33, 30,  27, 10, -2,-14,-23,-30,-33,-29,-35,-43,-45,
+       /* 50S */ -15,-18,-18,-16,-17,-15,-10,-10, -8, -2,  6, 14, 13,  3,  3, 10, 20, 27, 25, 26, 34, 39, 45, 45, 38, 39,  28, 13, -1,-15,-22,-22,-18,-15,-14,-10,-15,
+       /* 40S */  21,  6,  1, -7,-12,-12,-12,-10, -7, -1,  8, 23, 15, -2, -6,  6, 21, 24, 18, 26, 31, 33, 39, 41, 30, 24,  13, -2,-20,-32,-33,-27,-14, -2,  5, 20, 21,
+       /* 30S */  46, 22,  5, -2, -8,-13,-10, -7, -4,  1,  9, 32, 16,  4, -8,  4, 12, 15, 22, 27, 34, 29, 14, 15, 15,  7,  -9,-25,-37,-39,-23,-14, 15, 33, 34, 45, 46,
+       /* 20S */  51, 27, 10,  0, -9,-11, -5, -2, -3, -1,  9, 35, 20, -5, -6, -5,  0, 13, 17, 23, 21,  8, -9,-10,-11,-20, -40,-47,-45,-25,  5, 23, 45, 58, 57, 63, 51,
+       /* 10S */  36, 22, 11,  6, -1, -8,-10, -8,-11, -9,  1, 32,  4,-18,-13, -9,  4, 14, 12, 13, -2,-14,-25,-32,-38,-60, -75,-63,-26,  0, 35, 52, 68, 76, 64, 52, 36,
+       /* 00N */  22, 16, 17, 13,  1,-12,-23,-20,-14, -3, 14, 10,-15,-27,-18,  3, 12, 20, 18, 12,-13, -9,-28,-49,-62,-89,-102,-63, -9, 33, 58, 73, 74, 63, 50, 32, 22,
+       /* 10N */  13, 12, 11,  2,-11,-28,-38,-29,-10,  3,  1,-11,-41,-42,-16,  3, 17, 33, 22, 23,  2, -3, -7,-36,-59,-90, -95,-63,-24, 12, 53, 60, 58, 46, 36, 26, 13,
+       /* 20N */   5, 10,  7, -7,-23,-39,-47,-34, -9,-10,-20,-45,-48,-32, -9, 17, 25, 31, 31, 26, 15,  6,  1,-29,-44,-61, -67,-59,-36,-11, 21, 39, 49, 39, 22, 10,  5,
+       /* 30N */  -7, -5, -8,-15,-28,-40,-42,-29,-22,-26,-32,-51,-40,-17, 17, 31, 34, 44, 36, 28, 29, 17, 12,-20,-15,-40, -33,-34,-34,-28,  7, 29, 43, 20,  4, -6, -7,
+       /* 40N */ -12,-10,-13,-20,-31,-34,-21,-16,-26,-34,-33,-35,-26,  2, 33, 59, 52, 51, 52, 48, 35, 40, 33, -9,-28,-39, -48,-59,-50,-28,  3, 23, 37, 18, -1,-11,-12,
+       /* 50N */  -8,  8,  8,  1,-11,-19,-16,-18,-22,-35,-40,-26,-12, 24, 45, 63, 62, 59, 47, 48, 42, 28, 12,-10,-19,-33, -43,-42,-43,-29, -2, 17, 23, 22,  6,  2, -8,
+       /* 60N */   2,  9, 17, 10, 13,  1,-14,-30,-39,-46,-42,-21,  6, 29, 49, 65, 60, 57, 47, 41, 21, 18, 14,  7, -3,-22, -29,-32,-32,-26,-15, -2, 13, 17, 19,  6,  2,
+       /* 70N */   2,  2,  1, -1, -3, -7,-14,-24,-27,-25,-19,  3, 24, 37, 47, 60, 61, 58, 51, 43, 29, 20, 12,  5, -2,-10, -14,-12,-10,-14,-12, -6, -2,  3,  6,  4,  2,
+       /* 80N */   3,  1, -2, -3, -3, -3, -1,  3,  1,  5,  9, 11, 19, 27, 31, 34, 33, 34, 33, 34, 28, 23, 17, 13,  9,  4,   4,  1, -2, -2,  0,  2,  3,  2,  1,  1,  3,
+       /* 90N */  13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,  13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}; 
+       int     ilat, ilon;
+       int     ilat1, ilat2, ilon1, ilon2;
+
+       /* sanity checks to prevent segfault on bad data */
+       if ((lat > 90) || (lat < -90)) {
+               fatal(MYNAME ": Invalid latitude value (%f)\n", lat);
+       }
+       if (( lon > 180) || (lon < -180)) {
+               fatal(MYNAME ": Invalid longitude value (%f)\n", lon);;
+    }
+       
+       ilat=(int)floor(( 90.+lat)/10);
+       ilon=(int)floor((180.+lon)/10);
+    
+       ilat1=ilat;
+       ilon1=ilon;
+       ilat2=(ilat < GEOID_ROW-1)? ilat+1:ilat;
+       ilon2=(ilon < GEOID_COL-1)? ilon+1:ilon;
+
+       return bilinear(
+               ilon1*10.-180.,ilat1*10.-90.,
+               ilon2*10.-180.,ilat2*10.-90.,
+               lon, lat,
+               (double)geoid_delta[ilon1+ilat1*GEOID_COL],
+               (double)geoid_delta[ilon2+ilat1*GEOID_COL],
+               (double)geoid_delta[ilon1+ilat2*GEOID_COL],
+               (double)geoid_delta[ilon2+ilat2*GEOID_COL]
+               );
+}
+
+
+static void
+correct_height(const waypoint *wpt)
+{
+       waypoint *waypointp = (waypoint *) wpt;
+
+       if (addopt)
+               waypointp->altitude += addf;
+
+       if (wgs84tomslopt)
+               waypointp->altitude -= wgs84_separation(waypointp->latitude, waypointp->longitude);
+}
+
+
+static void
+height_init(const char *args)
+{
+       char *unit;
+       
+       if (addopt) {
+               addf = strtod(addopt, &unit);
+       
+               if (*unit == 'f' || *unit== 'F') {
+                       addf = FEET_TO_METERS(addf);
+               }
+               else if ((*unit != 'm') && (*unit != 'M') && (*unit != '\0'))  {
+                       fatal(MYNAME ": Invalid unit (\"%c\")! Please use \"m\" for meter or \"f\" for feet.\n", *unit);
+               }
+       }
+       else {
+               addf = 0.0;
+       }
+}
+
+
+static void 
+height_process(void)   /* this procedure must be present in vecs */
+{
+       waypt_disp_all(correct_height);
+       route_disp_all(NULL, NULL, correct_height);
+       track_disp_all(NULL, NULL, correct_height);
+}
+
+
+filter_vecs_t height_vecs = {
+       height_init,
+       height_process,
+       NULL,
+       NULL,
+       height_args
+};
+
+
+#endif // FILTERS_ENABLED
index 206e9cde96cf28ca4b2f3e38febbf699b5349646..adcb523eded203faa7102727f5454bfc7ba8fd84 100644 (file)
                                RelativePath="..\gtrnctr.c"
                                >
                        </File>
+                       <File
+                               RelativePath="..\height.c"
+                               >
+                       </File>
                        <File
                                RelativePath="..\hiketech.c"
                                >
diff --git a/reference/track/height.gpx b/reference/track/height.gpx
new file mode 100755 (executable)
index 0000000..45db005
--- /dev/null
@@ -0,0 +1,567 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="50.827089869" minlon="6.222871869" maxlat="50.865717758" maxlon="6.245795987"/>
+<trk>
+  <desc>Log every 10 sec, 0 m, 0 km/h</desc>
+<trkseg>
+<trkpt lat="50.865717758" lon="6.222871869">
+  <ele>195.780899</ele>
+<time>2008-07-29T06:53:26Z</time>
+  <course>161.293961</course>
+  <speed>0.023978</speed>
+  <name>TP0110</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.020000</hdop>
+  <vdop>0.880000</vdop>
+  <pdop>1.350000</pdop>
+</trkpt>
+<trkpt lat="50.865667798" lon="6.222886101">
+  <ele>195.678741</ele>
+<time>2008-07-29T06:53:36Z</time>
+  <course>164.263916</course>
+  <speed>5.327742</speed>
+  <name>TP0111</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>1.480000</vdop>
+  <pdop>1.740000</pdop>
+</trkpt>
+<trkpt lat="50.864863215" lon="6.223279763">
+  <ele>196.897476</ele>
+<time>2008-07-29T06:53:46Z</time>
+  <course>162.088165</course>
+  <speed>11.843518</speed>
+  <name>TP0112</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.380000</vdop>
+  <pdop>1.650000</pdop>
+</trkpt>
+<trkpt lat="50.863556656" lon="6.224139074">
+  <ele>195.390579</ele>
+<time>2008-07-29T06:53:56Z</time>
+  <course>153.299805</course>
+  <speed>18.403793</speed>
+  <name>TP0113</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.260000</hdop>
+  <vdop>2.090000</vdop>
+  <pdop>2.440000</pdop>
+</trkpt>
+<trkpt lat="50.862044835" lon="6.225447079">
+  <ele>196.039886</ele>
+<time>2008-07-29T06:54:06Z</time>
+  <course>151.212051</course>
+  <speed>19.475996</speed>
+  <name>TP0114</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>1.480000</vdop>
+  <pdop>1.750000</pdop>
+</trkpt>
+<trkpt lat="50.860492114" lon="6.226932932">
+  <ele>195.953262</ele>
+<time>2008-07-29T06:54:16Z</time>
+  <course>146.928894</course>
+  <speed>19.539358</speed>
+  <name>TP0115</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.880000</vdop>
+  <pdop>2.160000</pdop>
+</trkpt>
+<trkpt lat="50.859037371" lon="6.228467480">
+  <ele>196.389969</ele>
+<time>2008-07-29T06:54:26Z</time>
+  <course>146.199387</course>
+  <speed>19.320868</speed>
+  <name>TP0116</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.390000</hdop>
+  <vdop>2.240000</vdop>
+  <pdop>2.640000</pdop>
+</trkpt>
+<trkpt lat="50.857541310" lon="6.230045411">
+  <ele>196.359695</ele>
+<time>2008-07-29T06:54:36Z</time>
+  <course>146.045898</course>
+  <speed>19.448168</speed>
+  <name>TP0117</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.300000</hdop>
+  <vdop>2.030000</vdop>
+  <pdop>2.410000</pdop>
+</trkpt>
+<trkpt lat="50.856043127" lon="6.231628001">
+  <ele>196.074524</ele>
+<time>2008-07-29T06:54:46Z</time>
+  <course>146.341537</course>
+  <speed>19.894892</speed>
+  <name>TP0118</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.390000</hdop>
+  <vdop>2.240000</vdop>
+  <pdop>2.640000</pdop>
+</trkpt>
+<trkpt lat="50.854634087" lon="6.233121896">
+  <ele>197.843628</ele>
+<time>2008-07-29T06:54:56Z</time>
+  <course>145.704956</course>
+  <speed>16.669222</speed>
+  <name>TP0119</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.550000</vdop>
+  <pdop>1.880000</pdop>
+</trkpt>
+<trkpt lat="50.853565422" lon="6.234249097">
+  <ele>202.286789</ele>
+<time>2008-07-29T06:55:06Z</time>
+  <course>146.005951</course>
+  <speed>13.027266</speed>
+  <name>TP0120</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.400000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.853023686" lon="6.234809142">
+  <ele>202.414261</ele>
+<time>2008-07-29T06:55:16Z</time>
+  <course>146.901215</course>
+  <speed>1.206095</speed>
+  <name>TP0121</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.840000</hdop>
+  <vdop>0.810000</vdop>
+  <pdop>1.170000</pdop>
+</trkpt>
+<trkpt lat="50.853011126" lon="6.234822841">
+  <ele>203.334824</ele>
+<time>2008-07-29T06:55:26Z</time>
+  <course>138.959549</course>
+  <speed>0.011050</speed>
+  <name>TP0122</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>0.820000</vdop>
+  <pdop>1.240000</pdop>
+</trkpt>
+<trkpt lat="50.852688877" lon="6.235152203">
+  <ele>206.549713</ele>
+<time>2008-07-29T06:55:36Z</time>
+  <course>146.013168</course>
+  <speed>9.511775</speed>
+  <name>TP0123</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.851764779" lon="6.236133821">
+  <ele>208.111160</ele>
+<time>2008-07-29T06:55:46Z</time>
+  <course>145.465225</course>
+  <speed>15.709099</speed>
+  <name>TP0124</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.850516850" lon="6.237476287">
+  <ele>208.874451</ele>
+<time>2008-07-29T06:55:56Z</time>
+  <course>146.075500</course>
+  <speed>18.512190</speed>
+  <name>TP0125</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.849101390" lon="6.238963837">
+  <ele>210.970779</ele>
+<time>2008-07-29T06:56:06Z</time>
+  <course>146.079727</course>
+  <speed>18.825529</speed>
+  <name>TP0126</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.847635472" lon="6.240531138">
+  <ele>215.003540</ele>
+<time>2008-07-29T06:56:16Z</time>
+  <course>146.143692</course>
+  <speed>20.144392</speed>
+  <name>TP0127</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.990000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.730000</pdop>
+</trkpt>
+<trkpt lat="50.846080463" lon="6.242129629">
+  <ele>217.159836</ele>
+<time>2008-07-29T06:56:26Z</time>
+  <course>147.831940</course>
+  <speed>20.504822</speed>
+  <name>TP0128</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.844480339" lon="6.243585047">
+  <ele>214.226456</ele>
+<time>2008-07-29T06:56:36Z</time>
+  <course>153.660782</course>
+  <speed>20.871927</speed>
+  <name>TP0129</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.940000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.842739349" lon="6.244716892">
+  <ele>212.094818</ele>
+<time>2008-07-29T06:56:46Z</time>
+  <course>162.121063</course>
+  <speed>20.861839</speed>
+  <name>TP0130</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.690000</pdop>
+</trkpt>
+<trkpt lat="50.840971871" lon="6.245452870">
+  <ele>211.116760</ele>
+<time>2008-07-29T06:56:56Z</time>
+  <course>169.502975</course>
+  <speed>19.669909</speed>
+  <name>TP0131</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>1.600000</vdop>
+  <pdop>1.960000</pdop>
+</trkpt>
+<trkpt lat="50.839297511" lon="6.245762047">
+  <ele>209.528275</ele>
+<time>2008-07-29T06:57:06Z</time>
+  <course>176.329559</course>
+  <speed>17.733749</speed>
+  <name>TP0132</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.837920715" lon="6.245795987">
+  <ele>209.119659</ele>
+<time>2008-07-29T06:57:16Z</time>
+  <course>180.751617</course>
+  <speed>12.216647</speed>
+  <name>TP0133</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.837218585" lon="6.245763805">
+  <ele>209.183655</ele>
+<time>2008-07-29T06:57:26Z</time>
+  <course>180.543655</course>
+  <speed>3.888501</speed>
+  <name>TP0134</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.836823991" lon="6.245769759">
+  <ele>209.345215</ele>
+<time>2008-07-29T06:57:36Z</time>
+  <course>181.453415</course>
+  <speed>7.413952</speed>
+  <name>TP0135</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.430000</vdop>
+  <pdop>1.700000</pdop>
+</trkpt>
+<trkpt lat="50.835798748" lon="6.245745388">
+  <ele>209.575470</ele>
+<time>2008-07-29T06:57:46Z</time>
+  <course>180.527542</course>
+  <speed>14.646052</speed>
+  <name>TP0136</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.834379309" lon="6.245734786">
+  <ele>209.706360</ele>
+<time>2008-07-29T06:57:56Z</time>
+  <course>180.994965</course>
+  <speed>17.144146</speed>
+  <name>TP0137</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.832781065" lon="6.245684290">
+  <ele>210.981903</ele>
+<time>2008-07-29T06:58:06Z</time>
+  <course>180.547180</course>
+  <speed>17.879311</speed>
+  <name>TP0138</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.540000</vdop>
+  <pdop>1.810000</pdop>
+</trkpt>
+<trkpt lat="50.831213506" lon="6.245643131">
+  <ele>213.639923</ele>
+<time>2008-07-29T06:58:16Z</time>
+  <course>181.557831</course>
+  <speed>17.341228</speed>
+  <name>TP0139</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.540000</vdop>
+  <pdop>1.810000</pdop>
+</trkpt>
+<trkpt lat="50.829728949" lon="6.245609101">
+  <ele>214.042358</ele>
+<time>2008-07-29T06:58:26Z</time>
+  <course>181.223846</course>
+  <speed>15.520967</speed>
+  <name>TP0140</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.940000</vdop>
+  <pdop>2.210000</pdop>
+</trkpt>
+<trkpt lat="50.828598302" lon="6.245579941">
+  <ele>206.812027</ele>
+<time>2008-07-29T06:58:36Z</time>
+  <course>181.608673</course>
+  <speed>8.122931</speed>
+  <name>TP0141</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.950000</vdop>
+  <pdop>2.210000</pdop>
+</trkpt>
+<trkpt lat="50.828335995" lon="6.245583984">
+  <ele>203.424423</ele>
+<time>2008-07-29T06:58:46Z</time>
+  <course>173.229111</course>
+  <speed>0.455293</speed>
+  <name>TP0142</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.910000</hdop>
+  <vdop>0.840000</vdop>
+  <pdop>1.240000</pdop>
+</trkpt>
+<trkpt lat="50.828315071" lon="6.245585815">
+  <ele>202.360809</ele>
+<time>2008-07-29T06:58:56Z</time>
+  <course>181.487564</course>
+  <speed>0.070300</speed>
+  <name>TP0143</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.260000</hdop>
+  <vdop>0.920000</vdop>
+  <pdop>1.560000</pdop>
+</trkpt>
+<trkpt lat="50.828313011" lon="6.245585648">
+  <ele>202.515137</ele>
+<time>2008-07-29T06:59:06Z</time>
+  <course>268.758911</course>
+  <speed>0.038898</speed>
+  <name>TP0144</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.020000</hdop>
+  <vdop>0.890000</vdop>
+  <pdop>1.350000</pdop>
+</trkpt>
+<trkpt lat="50.828084072" lon="6.245542982">
+  <ele>203.537628</ele>
+<time>2008-07-29T06:59:16Z</time>
+  <course>185.460052</course>
+  <speed>7.315135</speed>
+  <name>TP0145</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.960000</vdop>
+  <pdop>2.220000</pdop>
+</trkpt>
+<trkpt lat="50.827525636" lon="6.245578224">
+  <ele>201.630936</ele>
+<time>2008-07-29T06:59:26Z</time>
+  <course>174.653168</course>
+  <speed>0.382723</speed>
+  <name>TP0146</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>0.850000</vdop>
+  <pdop>1.430000</pdop>
+</trkpt>
+<trkpt lat="50.827517528" lon="6.245592697">
+  <ele>202.598358</ele>
+<time>2008-07-29T06:59:36Z</time>
+  <course>174.010529</course>
+  <speed>0.048324</speed>
+  <name>TP0147</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.610000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827518490" lon="6.245591882">
+  <ele>202.834427</ele>
+<time>2008-07-29T06:59:46Z</time>
+  <course>330.416962</course>
+  <speed>0.042397</speed>
+  <name>TP0148</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827517619" lon="6.245591501">
+  <ele>203.029007</ele>
+<time>2008-07-29T06:59:56Z</time>
+  <course>330.416962</course>
+  <speed>0.003231</speed>
+  <name>TP0149</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827517312" lon="6.245590729">
+  <ele>203.197311</ele>
+<time>2008-07-29T07:00:06Z</time>
+  <course>330.416962</course>
+  <speed>0.000434</speed>
+  <name>TP0150</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827516711" lon="6.245589700">
+  <ele>203.374374</ele>
+<time>2008-07-29T07:00:16Z</time>
+  <course>200.356400</course>
+  <speed>0.169673</speed>
+  <name>TP0151</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827117198" lon="6.245624383">
+  <ele>203.469315</ele>
+<time>2008-07-29T07:00:26Z</time>
+  <course>173.281235</course>
+  <speed>2.458185</speed>
+  <name>TP0152</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+<trkpt lat="50.827089869" lon="6.245617902">
+  <ele>205.763046</ele>
+<time>2008-07-29T07:00:36Z</time>
+  <course>172.024109</course>
+  <speed>0.011256</speed>
+  <name>TP0153</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>0.850000</vdop>
+  <pdop>1.430000</pdop>
+</trkpt>
+<trkpt lat="50.827090094" lon="6.245617582">
+  <ele>205.838577</ele>
+<time>2008-07-29T07:00:46Z</time>
+  <course>172.024109</course>
+  <speed>0.001248</speed>
+  <name>TP0154</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+<trkpt lat="50.827090427" lon="6.245617316">
+  <ele>205.928421</ele>
+<time>2008-07-29T07:00:56Z</time>
+  <course>172.024109</course>
+  <speed>0.002104</speed>
+  <name>TP0155</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
diff --git a/reference/track/height_out.gpx b/reference/track/height_out.gpx
new file mode 100755 (executable)
index 0000000..5188b72
--- /dev/null
@@ -0,0 +1,567 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="50.827089869" minlon="6.222871869" maxlat="50.865717758" maxlon="6.245795987"/>
+<trk>
+  <desc>Log every 10 sec, 0 m, 0 km/h</desc>
+<trkseg>
+<trkpt lat="50.865717758" lon="6.222871869">
+  <ele>248.535719</ele>
+<time>2008-07-29T06:53:26Z</time>
+  <course>161.293961</course>
+  <speed>0.023978</speed>
+  <name>TP0110</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.020000</hdop>
+  <vdop>0.880000</vdop>
+  <pdop>1.350000</pdop>
+</trkpt>
+<trkpt lat="50.865667798" lon="6.222886101">
+  <ele>248.433539</ele>
+<time>2008-07-29T06:53:36Z</time>
+  <course>164.263916</course>
+  <speed>5.327742</speed>
+  <name>TP0111</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>1.480000</vdop>
+  <pdop>1.740000</pdop>
+</trkpt>
+<trkpt lat="50.864863215" lon="6.223279763">
+  <ele>249.651908</ele>
+<time>2008-07-29T06:53:46Z</time>
+  <course>162.088165</course>
+  <speed>11.843518</speed>
+  <name>TP0112</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.380000</vdop>
+  <pdop>1.650000</pdop>
+</trkpt>
+<trkpt lat="50.863556656" lon="6.224139074">
+  <ele>248.144408</ele>
+<time>2008-07-29T06:53:56Z</time>
+  <course>153.299805</course>
+  <speed>18.403793</speed>
+  <name>TP0113</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.260000</hdop>
+  <vdop>2.090000</vdop>
+  <pdop>2.440000</pdop>
+</trkpt>
+<trkpt lat="50.862044835" lon="6.225447079">
+  <ele>248.793004</ele>
+<time>2008-07-29T06:54:06Z</time>
+  <course>151.212051</course>
+  <speed>19.475996</speed>
+  <name>TP0114</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>1.480000</vdop>
+  <pdop>1.750000</pdop>
+</trkpt>
+<trkpt lat="50.860492114" lon="6.226932932">
+  <ele>248.705645</ele>
+<time>2008-07-29T06:54:16Z</time>
+  <course>146.928894</course>
+  <speed>19.539358</speed>
+  <name>TP0115</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.880000</vdop>
+  <pdop>2.160000</pdop>
+</trkpt>
+<trkpt lat="50.859037371" lon="6.228467480">
+  <ele>249.141656</ele>
+<time>2008-07-29T06:54:26Z</time>
+  <course>146.199387</course>
+  <speed>19.320868</speed>
+  <name>TP0116</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.390000</hdop>
+  <vdop>2.240000</vdop>
+  <pdop>2.640000</pdop>
+</trkpt>
+<trkpt lat="50.857541310" lon="6.230045411">
+  <ele>249.110667</ele>
+<time>2008-07-29T06:54:36Z</time>
+  <course>146.045898</course>
+  <speed>19.448168</speed>
+  <name>TP0117</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.300000</hdop>
+  <vdop>2.030000</vdop>
+  <pdop>2.410000</pdop>
+</trkpt>
+<trkpt lat="50.856043127" lon="6.231628001">
+  <ele>248.824779</ele>
+<time>2008-07-29T06:54:46Z</time>
+  <course>146.341537</course>
+  <speed>19.894892</speed>
+  <name>TP0118</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.390000</hdop>
+  <vdop>2.240000</vdop>
+  <pdop>2.640000</pdop>
+</trkpt>
+<trkpt lat="50.854634087" lon="6.233121896">
+  <ele>250.593209</ele>
+<time>2008-07-29T06:54:56Z</time>
+  <course>145.704956</course>
+  <speed>16.669222</speed>
+  <name>TP0119</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.550000</vdop>
+  <pdop>1.880000</pdop>
+</trkpt>
+<trkpt lat="50.853565422" lon="6.234249097">
+  <ele>255.035858</ele>
+<time>2008-07-29T06:55:06Z</time>
+  <course>146.005951</course>
+  <speed>13.027266</speed>
+  <name>TP0120</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.400000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.853023686" lon="6.234809142">
+  <ele>255.163071</ele>
+<time>2008-07-29T06:55:16Z</time>
+  <course>146.901215</course>
+  <speed>1.206095</speed>
+  <name>TP0121</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.840000</hdop>
+  <vdop>0.810000</vdop>
+  <pdop>1.170000</pdop>
+</trkpt>
+<trkpt lat="50.853011126" lon="6.234822841">
+  <ele>256.083628</ele>
+<time>2008-07-29T06:55:26Z</time>
+  <course>138.959549</course>
+  <speed>0.011050</speed>
+  <name>TP0122</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.930000</hdop>
+  <vdop>0.820000</vdop>
+  <pdop>1.240000</pdop>
+</trkpt>
+<trkpt lat="50.852688877" lon="6.235152203">
+  <ele>259.298363</ele>
+<time>2008-07-29T06:55:36Z</time>
+  <course>146.013168</course>
+  <speed>9.511775</speed>
+  <name>TP0123</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.851764779" lon="6.236133821">
+  <ele>260.859367</ele>
+<time>2008-07-29T06:55:46Z</time>
+  <course>145.465225</course>
+  <speed>15.709099</speed>
+  <name>TP0124</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.670000</pdop>
+</trkpt>
+<trkpt lat="50.850516850" lon="6.237476287">
+  <ele>261.622059</ele>
+<time>2008-07-29T06:55:56Z</time>
+  <course>146.075500</course>
+  <speed>18.512190</speed>
+  <name>TP0125</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.900000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.849101390" lon="6.238963837">
+  <ele>263.717709</ele>
+<time>2008-07-29T06:56:06Z</time>
+  <course>146.079727</course>
+  <speed>18.825529</speed>
+  <name>TP0126</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.410000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.847635472" lon="6.240531138">
+  <ele>267.749766</ele>
+<time>2008-07-29T06:56:16Z</time>
+  <course>146.143692</course>
+  <speed>20.144392</speed>
+  <name>TP0127</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.990000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.730000</pdop>
+</trkpt>
+<trkpt lat="50.846080463" lon="6.242129629">
+  <ele>269.905317</ele>
+<time>2008-07-29T06:56:26Z</time>
+  <course>147.831940</course>
+  <speed>20.504822</speed>
+  <name>TP0128</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.680000</pdop>
+</trkpt>
+<trkpt lat="50.844480339" lon="6.243585047">
+  <ele>266.971178</ele>
+<time>2008-07-29T06:56:36Z</time>
+  <course>153.660782</course>
+  <speed>20.871927</speed>
+  <name>TP0129</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.940000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.842739349" lon="6.244716892">
+  <ele>264.838733</ele>
+<time>2008-07-29T06:56:46Z</time>
+  <course>162.121063</course>
+  <speed>20.861839</speed>
+  <name>TP0130</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.420000</vdop>
+  <pdop>1.690000</pdop>
+</trkpt>
+<trkpt lat="50.840971871" lon="6.245452870">
+  <ele>263.859872</ele>
+<time>2008-07-29T06:56:56Z</time>
+  <course>169.502975</course>
+  <speed>19.669909</speed>
+  <name>TP0131</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>1.600000</vdop>
+  <pdop>1.960000</pdop>
+</trkpt>
+<trkpt lat="50.839297511" lon="6.245762047">
+  <ele>262.270642</ele>
+<time>2008-07-29T06:57:06Z</time>
+  <course>176.329559</course>
+  <speed>17.733749</speed>
+  <name>TP0132</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.837920715" lon="6.245795987">
+  <ele>261.861423</ele>
+<time>2008-07-29T06:57:16Z</time>
+  <course>180.751617</course>
+  <speed>12.216647</speed>
+  <name>TP0133</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.520000</vdop>
+  <pdop>1.790000</pdop>
+</trkpt>
+<trkpt lat="50.837218585" lon="6.245763805">
+  <ele>261.925113</ele>
+<time>2008-07-29T06:57:26Z</time>
+  <course>180.543655</course>
+  <speed>3.888501</speed>
+  <name>TP0134</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.836823991" lon="6.245769759">
+  <ele>262.086501</ele>
+<time>2008-07-29T06:57:36Z</time>
+  <course>181.453415</course>
+  <speed>7.413952</speed>
+  <name>TP0135</name>
+  <fix>3d</fix>
+  <sat>11</sat>
+  <hdop>0.910000</hdop>
+  <vdop>1.430000</vdop>
+  <pdop>1.700000</pdop>
+</trkpt>
+<trkpt lat="50.835798748" lon="6.245745388">
+  <ele>262.316308</ele>
+<time>2008-07-29T06:57:46Z</time>
+  <course>180.527542</course>
+  <speed>14.646052</speed>
+  <name>TP0136</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.834379309" lon="6.245734786">
+  <ele>262.446578</ele>
+<time>2008-07-29T06:57:56Z</time>
+  <course>180.994965</course>
+  <speed>17.144146</speed>
+  <name>TP0137</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.530000</vdop>
+  <pdop>1.800000</pdop>
+</trkpt>
+<trkpt lat="50.832781065" lon="6.245684290">
+  <ele>263.721425</ele>
+<time>2008-07-29T06:58:06Z</time>
+  <course>180.547180</course>
+  <speed>17.879311</speed>
+  <name>TP0138</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.540000</vdop>
+  <pdop>1.810000</pdop>
+</trkpt>
+<trkpt lat="50.831213506" lon="6.245643131">
+  <ele>266.378761</ele>
+<time>2008-07-29T06:58:16Z</time>
+  <course>181.557831</course>
+  <speed>17.341228</speed>
+  <name>TP0139</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.950000</hdop>
+  <vdop>1.540000</vdop>
+  <pdop>1.810000</pdop>
+</trkpt>
+<trkpt lat="50.829728949" lon="6.245609101">
+  <ele>266.780548</ele>
+<time>2008-07-29T06:58:26Z</time>
+  <course>181.223846</course>
+  <speed>15.520967</speed>
+  <name>TP0140</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.940000</vdop>
+  <pdop>2.210000</pdop>
+</trkpt>
+<trkpt lat="50.828598302" lon="6.245579941">
+  <ele>259.549724</ele>
+<time>2008-07-29T06:58:36Z</time>
+  <course>181.608673</course>
+  <speed>8.122931</speed>
+  <name>TP0141</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.950000</vdop>
+  <pdop>2.210000</pdop>
+</trkpt>
+<trkpt lat="50.828335995" lon="6.245583984">
+  <ele>256.162006</ele>
+<time>2008-07-29T06:58:46Z</time>
+  <course>173.229111</course>
+  <speed>0.455293</speed>
+  <name>TP0142</name>
+  <fix>3d</fix>
+  <sat>10</sat>
+  <hdop>0.910000</hdop>
+  <vdop>0.840000</vdop>
+  <pdop>1.240000</pdop>
+</trkpt>
+<trkpt lat="50.828315071" lon="6.245585815">
+  <ele>255.098382</ele>
+<time>2008-07-29T06:58:56Z</time>
+  <course>181.487564</course>
+  <speed>0.070300</speed>
+  <name>TP0143</name>
+  <fix>3d</fix>
+  <sat>8</sat>
+  <hdop>1.260000</hdop>
+  <vdop>0.920000</vdop>
+  <pdop>1.560000</pdop>
+</trkpt>
+<trkpt lat="50.828313011" lon="6.245585648">
+  <ele>255.252709</ele>
+<time>2008-07-29T06:59:06Z</time>
+  <course>268.758911</course>
+  <speed>0.038898</speed>
+  <name>TP0144</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.020000</hdop>
+  <vdop>0.890000</vdop>
+  <pdop>1.350000</pdop>
+</trkpt>
+<trkpt lat="50.828084072" lon="6.245542982">
+  <ele>256.275102</ele>
+<time>2008-07-29T06:59:16Z</time>
+  <course>185.460052</course>
+  <speed>7.315135</speed>
+  <name>TP0145</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.060000</hdop>
+  <vdop>1.960000</vdop>
+  <pdop>2.220000</pdop>
+</trkpt>
+<trkpt lat="50.827525636" lon="6.245578224">
+  <ele>254.368165</ele>
+<time>2008-07-29T06:59:26Z</time>
+  <course>174.653168</course>
+  <speed>0.382723</speed>
+  <name>TP0146</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>0.850000</vdop>
+  <pdop>1.430000</pdop>
+</trkpt>
+<trkpt lat="50.827517528" lon="6.245592697">
+  <ele>255.335582</ele>
+<time>2008-07-29T06:59:36Z</time>
+  <course>174.010529</course>
+  <speed>0.048324</speed>
+  <name>TP0147</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.610000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827518490" lon="6.245591882">
+  <ele>255.571652</ele>
+<time>2008-07-29T06:59:46Z</time>
+  <course>330.416962</course>
+  <speed>0.042397</speed>
+  <name>TP0148</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827517619" lon="6.245591501">
+  <ele>255.766231</ele>
+<time>2008-07-29T06:59:56Z</time>
+  <course>330.416962</course>
+  <speed>0.003231</speed>
+  <name>TP0149</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.160000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827517312" lon="6.245590729">
+  <ele>255.934535</ele>
+<time>2008-07-29T07:00:06Z</time>
+  <course>330.416962</course>
+  <speed>0.000434</speed>
+  <name>TP0150</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827516711" lon="6.245589700">
+  <ele>256.111598</ele>
+<time>2008-07-29T07:00:16Z</time>
+  <course>200.356400</course>
+  <speed>0.169673</speed>
+  <name>TP0151</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>1.990000</pdop>
+</trkpt>
+<trkpt lat="50.827117198" lon="6.245624383">
+  <ele>256.206363</ele>
+<time>2008-07-29T07:00:26Z</time>
+  <course>173.281235</course>
+  <speed>2.458185</speed>
+  <name>TP0152</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+<trkpt lat="50.827089869" lon="6.245617902">
+  <ele>258.500082</ele>
+<time>2008-07-29T07:00:36Z</time>
+  <course>172.024109</course>
+  <speed>0.011256</speed>
+  <name>TP0153</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.150000</hdop>
+  <vdop>0.850000</vdop>
+  <pdop>1.430000</pdop>
+</trkpt>
+<trkpt lat="50.827090094" lon="6.245617582">
+  <ele>258.575613</ele>
+<time>2008-07-29T07:00:46Z</time>
+  <course>172.024109</course>
+  <speed>0.001248</speed>
+  <name>TP0154</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+<trkpt lat="50.827090427" lon="6.245617316">
+  <ele>258.665458</ele>
+<time>2008-07-29T07:00:56Z</time>
+  <course>172.024109</course>
+  <speed>0.002104</speed>
+  <name>TP0155</name>
+  <fix>3d</fix>
+  <sat>9</sat>
+  <hdop>1.170000</hdop>
+  <vdop>1.620000</vdop>
+  <pdop>2.000000</pdop>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
diff --git a/testo b/testo
index dc4afaf066d69a729a8b79bed40f1c8c557bf8eb..daef08269c7b964311e953f4cfd101b729a8a0b7 100755 (executable)
--- a/testo
+++ b/testo
@@ -1380,4 +1380,13 @@ ${PNAME} -i gpx -f ${TMPDIR}/${GoPalName}.im2  -o gopal -F ${TMPDIR}/${GoPalName
 compare ${TMPDIR}/${GoPalName}.tst2 ${TMPDIR}/${GoPalName}.tst3
 
 
+#
+# Height filter
+#
+rm -f ${TMPDIR}/height_out.gpx
+${PNAME} -i gpx -f ${REFERENCE}/track/height.gpx \
+               -x height,wgs84tomsl,add=100m  \
+               -o gpx -F ${TMPDIR}/height_out.gpx
+compare ${TMPDIR}/height_out.gpx ${REFERENCE}/track/height_out.gpx
+
 exit 0
diff --git a/xmldoc/formats/height.xml b/xmldoc/formats/height.xml
new file mode 100755 (executable)
index 0000000..e6059ec
--- /dev/null
@@ -0,0 +1,21 @@
+<para>
+The height filter allows the correction of altitude values.
+
+At least one popular gps logger does store the ellipsoidal height (sum of the height above mean see level and the height of the geoid above the WGS84 ellipsoid) instead of the height above sea level, as it can be found on maps. 
+
+The height filter allows for the correction of these altitude values. This filter supports two options:   
+
+<option>wgs84tomsl</option> and <option>add</option>.  
+At least one of these options is required, both can be combined.  
+</para>
+<example id="height_wgs84tomsl">
+  <title> This option subtracts the WGS84 geoid height from every altitude. For GPS receivers like the iBlue747 the result is the height above mean see level.</title>
+  <para><userinput> gpsbabel -i gpx -f in.gpx -x height,wgs84tomsl -o gpx -F out.gpx</userinput></para>
+  <para>The coordinates and altitude vales must be based an the WGS84 ellipsoid for this option to produce sensible results</para>
+</example>
+<example id="height_add">
+  <title> This options adds a constant value to every altitude.</title>
+  <para><userinput> gpsbabel -i gpx -f in.gpx -x height,add=10.2f -o gpx -F out.gpx</userinput></para>
+  <para>You can specify negative numbers to subtract the value. If no unit is specified meters are assumed. For feet you can attach an "f" to the value.</para>
+</example>
+
diff --git a/xmldoc/formats/options/height-add.xml b/xmldoc/formats/options/height-add.xml
new file mode 100755 (executable)
index 0000000..2c4b156
--- /dev/null
@@ -0,0 +1,6 @@
+<para>
+Adds a constant value to every altitude. You can specify negative numbers to subtract the value.
+</para>
+<para>
+If no unit is specified, meters (m) are assumed. You can override this by attaching a "f" for feet to the number.
+</para>
diff --git a/xmldoc/formats/options/height-wgs84tomsl.xml b/xmldoc/formats/options/height-wgs84tomsl.xml
new file mode 100755 (executable)
index 0000000..353ec4f
--- /dev/null
@@ -0,0 +1,6 @@
+<para>
+  Subtracts the WGS84 geoid height from every altitude.
+</para>
+<para>
+  For GPS receivers like the iBlue747, this corrects the logged altitudes to height above mean sea level.
+</para>